package com.company.util;

import org.junit.Test;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

/**
 * @author fu xiao liu
 * @date 2021-08-11 19:30
 * QQ邮件发送
 */
public class SendMailUtils {

    /*
     *  写信人 账号 以及 STMP
     */
    public static final String USER_MAIL = "1799504112@qq.com";
    public static  final String USER_STMP = "dqzmtrcouzrxcihj";

    /*
     * @param user  收信人
     * @param param  发送的参数
     */
    public static boolean sendShortMessage(String user,String param)  {
        // 创建Properties 类用于记录邮箱的一些属性
        Properties props = new Properties();
        // 表示SMTP发送邮件，必须进行身份验证
        props.put("mail.smtp.auth", "true");
        //此处填写SMTP服务器
        props.put("mail.smtp.host", "smtp.qq.com");
        //端口号，QQ邮箱端口587
        props.put("mail.smtp.port", "587");
        // 此处填写，写信人的账号
        props.put("mail.user", USER_MAIL);

        props.put("mail.from.alias", "健康服务");

        // 此处填写16位STMP口令
        props.put("mail.password", USER_STMP);

        // 构建授权信息，用于进行SMTP进行身份验证
        Authenticator authenticator = new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                // 用户名、密码
                String userName = props.getProperty("mail.user");
                String password = props.getProperty("mail.password");
                return new PasswordAuthentication(userName, password);
            }
        };

        // 使用环境属性和授权信息，创建邮件会话
        Session mailSession = Session.getInstance(props, authenticator);
        // 创建邮件消息
        MimeMessage message = new MimeMessage(mailSession);


        // 设置发件人
        InternetAddress form = null;
        String nick="";
        try {
            nick=javax .mail .internet .MimeUtility .encodeText("[健康服务]");
            form = new InternetAddress(props.getProperty("mail.user"),props.getProperty("mail.from.alias"),"UTF-8");
            message.setFrom(new InternetAddress(nick+" <"+props.getProperty("mail.user")+">"));

            // 设置收件人的邮箱
            InternetAddress to = new InternetAddress(user);
            message.setRecipient(MimeMessage.RecipientType.TO, to);

            // 设置邮件标题
            message.setSubject("[健康服务] 邮箱协助登录");

            //发送的内容
            String news = "尊敬的用户 ：\n" +
                    "您的健康服务账号登录中 验证码为  "+ param +  " 。 若非您本人操作，请尽快 联系我们。<br>\n" +
                    "此致\n" +
                    "健康服务团队" ;

            // 设置邮件的内容体
            message.setContent(news, "text/html;charset=UTF-8");
            // 最后当然就是发送邮件啦
            Transport.send(message);

        } catch (Exception e) {
            e.printStackTrace();
            System.err.println("邮件发送异常");
            return  false;
        }
        System.out.println("发送成功");
        return  true;
    }



    @Test
    public void test(){
        SendMailUtils.sendShortMessage("1550417143@qq.com","34323");
    }

}
